home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / utilitys / memometr / part02 < prev   
Encoding:
Internet Message Format  |  1991-06-18  |  69.0 KB

  1. Path: news.larc.nasa.gov!amiga-request
  2. From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
  3. Subject: v91i121: MemMometer 2.20 - memory gauge, Part02/02
  4. Reply-To: hull@hao.ucar.edu (Howard Hull)
  5. Newsgroups: comp.sources.amiga
  6. Message-ID: <comp.sources.amiga.v91i121@ab20.larc.nasa.gov>
  7. References: <comp.sources.amiga.v91i120@ab20.larc.nasa.gov>
  8. Date: 14 Jun 91 22:30:41 GMT
  9. Approved: tadguy@uunet.UU.NET (Tad Guy)
  10. X-Mail-Submissions-To: amiga@uunet.uu.net
  11. X-Post-Discussions-To: comp.sys.amiga.misc
  12.  
  13. Submitted-by: hull@hao.ucar.edu (Howard Hull)
  14. Posting-number: Volume 91, Issue 121
  15. Archive-name: utilities/memometer-2.20/part02
  16.  
  17. #!/bin/sh
  18. # This is a shell archive.  Remove anything before this line, then unpack
  19. # it by saving it into a file and typing "sh file".  To overwrite existing
  20. # files, type "sh file -c".  You can also feed this as standard input via
  21. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  22. # will see the following message at the end:
  23. #        "End of archive 2 (of 2)."
  24. # Contents:  mm.c mminit.c
  25. # Wrapped by tadguy@ab20 on Fri Jun 14 18:30:39 1991
  26. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  27. if test -f 'mm.c' -a "${1}" != "-c" ; then 
  28.   echo shar: Will not clobber existing file \"'mm.c'\"
  29. else
  30. echo shar: Extracting \"'mm.c'\" \(38693 characters\)
  31. sed "s/^X//" >'mm.c' <<'END_OF_FILE'
  32. X/* : ai=0 bk=0 ts=8 */
  33. X#include "mm.h"
  34. X
  35. X#define FREEPEN -1L           /* workbench screen default colors */
  36. X#define REQ_WINDOW_WIDTH 319L /* width of warning requester window */
  37. X#define REQ_WINDOW_HEIGHT 79L /* height of warning requester window */
  38. X
  39. X#define SOK        0x001f     /* memory allocation control masks */
  40. X#define S1         0x0001
  41. X#define S2         0x0002
  42. X#define S4         0x0004
  43. X#define S8         0x0008
  44. X#define SA         0x0010
  45. X#define C1         0xfffe
  46. X#define C2         0xfffd
  47. X#define C4         0xfffb
  48. X#define C8         0xfff7
  49. X#define CA         0xffef
  50. X#define AARRRGH    20L         /* hang 20, cats, we're startin ta curl! */
  51. X
  52. X#define EXTENSION  16L         /* allocation request increment */
  53. X
  54. X#define FRAGS FALSE                          /* frags mode control boolian */
  55. X#define WARPS TRUE                           /* warps mode control boolian */
  56. X#define EVENMASK 0x7ffffffe           /* used to prevent odd address traps */
  57. X#define CLIHEIGHT 200L                             /* window scaling stuff */
  58. X#define SIZEGAD 9L
  59. X#define DRAGBAR 10L
  60. X#define BORDER 2L
  61. X#define WINW 16L                                   /* initial window width */
  62. X#define WINH (long)(CLIHEIGHT - SIZEGAD - DRAGBAR)   /* initial win height */
  63. X#define MINH 81L                              /* shortest allowable window */
  64. X#define MAXH 576L                              /* longest allowable window */
  65. X#define BART 1L                               /* title bar F text location */
  66. X#define BARH (long)(WINH - SIZEGAD - DRAGBAR)                /* bar height */
  67. X#define BARS (long)(BARH + 1)        /* number of memory items to allocate */
  68. X#define BARB (long)(BARH + DRAGBAR - 1)        /* bottom of mercury column */
  69. X#define BARE (long)(BARB + BORDER)              /* bar end E text position */
  70. X#define BARW (long)(((WINW - (2 * BORDER)) / 3) - 1)  /* 3 memfragmometers */
  71. X#define LEFT BORDER                   /* SLOW : since we're syncopated, we */
  72. X#define MIDDLE (LEFT + BARW + 1)      /* SLOW-FAST : do it going from bar  */
  73. X#define RIGHT (MIDDLE + BARW + 1)     /* FAST :to bar at an irregular pace */
  74. X#define RTEXT - 4L        /* offset for three char E/F text from left edge */
  75. X#define STARTVAL 64L    /* start by getting enough storage for a few frags */
  76. X#define TMARK 100000L                     /* timer granule in microseconds */
  77. X#define TICKIES (long)(1000000/TMARK)       /* number of TMARKS per second */
  78. X
  79. X/* typedef short BOOL */        /* this is in include/exec/types.h */
  80. X
  81. Xstruct IntuitionBase *IntuitionBase=NULL ;
  82. Xstruct Window *window ;
  83. Xstruct IntuiMessage *message;
  84. X/* struct IntuiMessage *GetMsg(); */        /* in functions.h */
  85. X
  86. Xstruct GfxBase *GfxBase=NULL ;
  87. X
  88. Xstruct IOStdReq *timermsg=NULL;
  89. Xstruct MsgPort *timerport=NULL;
  90. XULONG  timerbit=NULL;
  91. X
  92. X
  93. Xextern void InitProjItems();        /* this stuff is in the mminit section */
  94. Xextern void InitSetupItems();
  95. Xextern void InitPrioItems();
  96. Xextern void InitChipItems();
  97. Xextern void InitChipAItems();
  98. Xextern void InitSFItems();
  99. Xextern void InitSFAItems();
  100. Xextern void InitFastItems();
  101. Xextern void InitFastAItems();
  102. Xextern void InitMenu();
  103. Xextern void StartMenus();
  104. X
  105. XBOOL p_mode = FRAGS;          /* preset frags mode = 0, warps mode = 1 */
  106. X                              /* note: mode preset used as request for */
  107. X                              /*       change to warps mode after the  */
  108. X                              /*       first pass with frags mode set! */
  109. Xlong p_rate = 2;              /* preset sample interval, secs see menu */
  110. Xlong p_priority = 0;          /* preset priority, range -128 to +127   */
  111. X                              /* note: pri greater than zero is risky! */
  112. X                              /* keep in mind AmigaDOS priorities:     */
  113. X                              /* input.device 20, FileSystem 10, and   */
  114. X                              /* trackdisk.device, CON: 5 also if MM   */
  115. X                              /* is started from a CLI without the Run */
  116. X                              /* then that CLI inherits MM's priority! */
  117. Xlong p_chip = 512;            /* preset chip mem size, kbytes see menu */
  118. Xlong p_chipa = 0;             /* preset chip mem address, kb  see menu */
  119. Xlong p_sf = 0;                /* preset slowfast mem size, kb see menu */
  120. Xlong p_sfa = 2048;            /* preset slowfast mem addr, kb see menu */
  121. Xlong p_fast = 0;              /* preset fast mem size, mbytes see menu */
  122. Xlong p_fasta = -1;            /* preset fast mem addr, mbytes see menu */
  123. X                              /* zero or neg fasta is offset below the */
  124. X                              /* A3000 fast ram ceiling, aka 0x7000000 */
  125. X
  126. Xstatic BOOL mode;                    /* uninitialized for mode control */
  127. Xstatic BOOL mmode;                   /* uninitialized for mode  menu */
  128. Xstatic long delayval;                /* uninitialized for delay menu */
  129. Xstatic long priority;                /* uninitialized for priority menu */
  130. Xstatic long lastpri;                 /* uninitialized for priority incr */
  131. Xstatic long cmemsize;                /* uninitialized for chip  menu */
  132. Xstatic long cmembase;                /* uninitialized for chipa menu */
  133. Xstatic long sfmemsize;               /* uninitialized for sf    menu */
  134. Xstatic long sfmembase;               /* uninitialized for sfa   menu */
  135. Xstatic long fmemsize;                /* uninitialized for fast  menu */
  136. Xstatic long fmembase;                /* uninitialized for fasta menu */
  137. X
  138. Xstatic USHORT log ;                  /* memory allocation success flags */
  139. Xstatic BOOL things_are_cool = TRUE ; /* tells when to close the window  */
  140. Xstatic BOOL intsig = FALSE ;         /* intuition message detector */
  141. Xstatic USHORT chgflag = TRUE ;       /* menu request to adjust columns */
  142. Xstatic long chip[3], fast[3] ;       /* place to keep mem header pointers */
  143. Xstatic ULONG  *chunkv ;              /* demand allocated for frag chunks */
  144. Xstatic ULONG  *sizev ;               /* demand allocated for frag sizes */
  145. Xstatic ULONG  *csum ;                /* a col's height worth of checksums */
  146. Xstatic ULONG  *oldcsum ;             /* same height worth of old checksums */
  147. Xstatic USHORT *cell;                 /* 1 cell per pixel height of mercury */
  148. Xstatic long xl, xr ;                 /* used to Draw() memmometer segments */
  149. Xstatic long frags = STARTVAL ;       /* # of demand allocated frag items */
  150. Xstatic long warps = BARS ;           /* # of demand allocated column items */
  151. Xstatic long barh = BARH ;            /* EVEN #'d height of mercury column */
  152. Xstatic long barb = BARB ;            /* bottom position of mercury column */
  153. Xstatic short ticker = TICKIES ;      /* initialized delay tick variable */
  154. X
  155. X/* struct RastPort *rp ; */          /* wonder why we don't need this... ? */
  156. X
  157. X
  158. Xstatic struct TextAttr myfont = {
  159. X   (STRPTR) "topaz.font",
  160. X   TOPAZ_EIGHTY,
  161. X   0,
  162. X   0
  163. X};
  164. X/* E newsize gadget refresh text */ 
  165. Xstatic char ebuf[4] = " E " ;
  166. Xstatic struct IntuiText e_text = { 
  167. X   BLUP, WHTP,
  168. X   JAM2, 
  169. X   0, BARE,
  170. X   &myfont,
  171. X   (UBYTE *)ebuf, 
  172. X   NULL 
  173. X};
  174. X/* F title refresh text */
  175. Xstatic char fbuf[4] = " F " ;
  176. Xstatic struct IntuiText f_text = {
  177. X   BLUP, WHTP,
  178. X   JAM2,
  179. X   0, BART,
  180. X   &myfont,
  181. X   (UBYTE *)fbuf,
  182. X   &e_text
  183. X};
  184. Xstatic struct NewWindow newwindow = {
  185. X   0,                                        /* left edge */
  186. X   10,                                       /* top edge */
  187. X   WINW,                                     /* width */
  188. X   WINH,                                     /* height */
  189. X   0,                                        /* detail pen */
  190. X   1,                                        /* block pen */
  191. X   MENUPICK | NEWSIZE,                       /* messages */
  192. X/* WINDOWDEPTH | WINDOWCLOSE */              /* don't use these gads */
  193. X   WINDOWDRAG | WINDOWSIZING | NOCAREREFRESH,   /* add a few gadgets */
  194. X   NULL,                                     /* no custom gadgets */
  195. X   NULL,                                     /* default checkmark */
  196. X   (UBYTE *)"F",                             /* title */
  197. X   NULL,                                     /* initialize this! */
  198. X   NULL,                                     /* use screen bitmap */
  199. X   WINW, MINH, WINW, MAXH,                   /* min and max sizes */
  200. X   WBENCHSCREEN } ;                          /* use workbench screen */
  201. X
  202. Xvoid initmenus()
  203. X{
  204. X   (void) InitProjItems();              /* Initialize the menu items */
  205. X   (void) InitSetupItems();
  206. X   (void) InitPrioItems();
  207. X   (void) InitChipItems();
  208. X   (void) InitChipAItems();
  209. X   (void) InitSFItems();
  210. X   (void) InitSFAItems();
  211. X   (void) InitFastItems();
  212. X   (void) InitFastAItems();
  213. X   (void) InitMenu();
  214. X   (void) StartMenus();
  215. X   }
  216. X
  217. Xvoid handle_MENUPICK( class, code )
  218. Xunsigned long class;
  219. Xunsigned int code;
  220. X{
  221. X    unsigned int menunum, itemnum, subnum;
  222. X
  223. X    if (code == MENUNULL) return;
  224. X
  225. X    menunum = MENUNUM( code );
  226. X    itemnum = ITEMNUM( code );
  227. X    subnum  = SUBNUM( code );
  228. X    chgflag = TRUE;
  229. X    switch( menunum ) {
  230. X        case 0:
  231. X        switch( itemnum ) {
  232. X            case 0:
  233. X            WindowToFront(window);
  234. X            break;
  235. X
  236. X            case 1:
  237. X            WindowToBack(window);
  238. X            break;
  239. X
  240. X            case 2:
  241. X            things_are_cool = FALSE;  /* Quit */
  242. X            break;
  243. X            } /* end of switch ( Project itemnum ) */
  244. X        break;
  245. X
  246. X        case 1:
  247. X        switch( itemnum ) {
  248. X            case 0:
  249. X            switch( subnum ) {
  250. X                case 0:
  251. X                mode = FRAGS ;  /* Frags mode */
  252. X                break;
  253. X
  254. X                case 1:
  255. X                mmode = TRUE ;  /* Warps request */
  256. X                break;
  257. X                /* end of switch ( Mode subnum ) */
  258. X                }
  259. X            break;       
  260. X            case 1:
  261. X            switch( subnum ) {
  262. X                case 0:
  263. X                delayval = 1;
  264. X                break;
  265. X
  266. X                case 1:
  267. X                delayval = 2;
  268. X                break;
  269. X
  270. X                case 2:
  271. X                delayval = 5;
  272. X                break;
  273. X
  274. X                case 3:
  275. X                delayval = 10;
  276. X                break;
  277. X                /* end of switch ( Freq subnum ) */
  278. X                }
  279. X            break;       
  280. X            /* end of switch ( Setup itemnum ) */
  281. X            }
  282. X        break;
  283. X
  284. X        case 2:
  285. X        switch( itemnum ) {
  286. X            case  0:
  287. X            priority = lastpri;
  288. X            break;
  289. X
  290. X            case  1:
  291. X            priority = priority - 1;
  292. X            break;
  293. X
  294. X            case  2:
  295. X            priority = priority + 1;
  296. X            break;
  297. X
  298. X            case  3:
  299. X            priority = -99;
  300. X            lastpri = priority;
  301. X            break;
  302. X
  303. X            case  4:
  304. X            priority = -75;
  305. X            lastpri = priority;
  306. X            break;
  307. X
  308. X            case  5:
  309. X            priority = -50;
  310. X            lastpri = priority;
  311. X            break;
  312. X
  313. X            case  6:
  314. X            priority = -25;
  315. X            lastpri = priority;
  316. X            break;
  317. X
  318. X            case  7:
  319. X            priority = -20;
  320. X            lastpri = priority;
  321. X            break;
  322. X
  323. X            case  8:
  324. X            priority = -15;
  325. X            lastpri = priority;
  326. X            break;
  327. X
  328. X            case  9:
  329. X            priority = -10;
  330. X            lastpri = priority;
  331. X            break;
  332. X
  333. X            case 10:
  334. X            priority =  -5;
  335. X            lastpri = priority;
  336. X            break;
  337. X
  338. X            case 11:
  339. X            priority =   0;
  340. X            lastpri = priority;
  341. X            break;
  342. X
  343. X            case 12:
  344. X            priority =   5;
  345. X            lastpri = priority;
  346. X            break;
  347. X
  348. X            case 13:
  349. X            priority =  10;
  350. X            lastpri = priority;
  351. X            break;
  352. X
  353. X            case 14:
  354. X            priority =  15;
  355. X            lastpri = priority;
  356. X            break;
  357. X
  358. X            case 15:
  359. X            priority =  20;
  360. X            lastpri = priority;
  361. X            break;
  362. X            }
  363. X            /* end of switch ( Priority itemnum ) */
  364. X        break;
  365. X
  366. X        case 3:
  367. X        switch( itemnum ) {
  368. X            case 0:
  369. X            cmemsize = 0x000000;
  370. X            break;
  371. X
  372. X            case 1:
  373. X            cmemsize = 0x040000;
  374. X            break;
  375. X
  376. X            case 2:
  377. X            cmemsize = 0x080000;
  378. X            break;
  379. X
  380. X            case 3:
  381. X            cmemsize = 0x100000;
  382. X            break;
  383. X
  384. X            case 4:
  385. X            cmemsize = 0x200000;
  386. X            break;
  387. X            }
  388. X            /* end of switch ( Chip Size itemnum ) */
  389. X        break;
  390. X
  391. X        case 4:
  392. X        switch( itemnum ) {
  393. X            case 0:
  394. X            cmembase = 0x000000;
  395. X            break;
  396. X
  397. X            case 1:
  398. X            cmembase = 0x040000;
  399. X            break;
  400. X
  401. X            case 2:
  402. X            cmembase = 0x080000;
  403. X            break;
  404. X
  405. X            case 3:
  406. X            cmembase = 0x100000;
  407. X            break;
  408. X            }
  409. X            /* end of switch ( Chip Addr itemnum ) */
  410. X        break;
  411. X
  412. X        case 5:
  413. X        if (mode == WARPS)  mmode = TRUE ;
  414. X        switch( itemnum ) {
  415. X            case 0:
  416. X            sfmemsize = 0x000000;
  417. X            break;
  418. X
  419. X            case 1:
  420. X            sfmemsize = 0x040000;
  421. X            break;
  422. X
  423. X            case 2:
  424. X            sfmemsize = 0x080000;
  425. X            break;
  426. X
  427. X            case 3:
  428. X            sfmemsize = 0x0C0000;
  429. X            break;
  430. X
  431. X            case 4:
  432. X            sfmemsize = 0x100000;
  433. X            break;
  434. X
  435. X            case 5:
  436. X            sfmemsize = 0x180000;
  437. X            break;
  438. X
  439. X            case 6:
  440. X            sfmemsize = 0x200000;
  441. X            break;
  442. X
  443. X            case 7:
  444. X            sfmemsize = 0x300000;
  445. X            break;
  446. X
  447. X            case 8:
  448. X            sfmemsize = 0x400000;
  449. X            break;
  450. X
  451. X            case 9:
  452. X            sfmemsize = 0x600000;
  453. X            break;
  454. X
  455. X            case 10:
  456. X            sfmemsize = 0x800000;
  457. X            break;
  458. X            }
  459. X            /* end of switch ( SF Size itemnum ) */
  460. X        break;
  461. X
  462. X        case 6:
  463. X        if (mode == WARPS)  mmode = TRUE ;
  464. X        switch( itemnum ) {
  465. X            case 0:
  466. X            sfmembase = 0x200000;
  467. X            break;
  468. X
  469. X            case 1:
  470. X            sfmembase = 0x240000;
  471. X            break;
  472. X
  473. X            case 2:
  474. X            sfmembase = 0x280000;
  475. X            break;
  476. X
  477. X            case 3:
  478. X            sfmembase = 0x2C0000;
  479. X            break;
  480. X
  481. X            case 4:
  482. X            sfmembase = 0x300000;
  483. X            break;
  484. X
  485. X            case 5:
  486. X            sfmembase = 0x400000;
  487. X            break;
  488. X
  489. X            case 6:
  490. X            sfmembase = 0x500000;
  491. X            break;
  492. X
  493. X            case 7:
  494. X            sfmembase = 0x600000;
  495. X            break;
  496. X
  497. X            case 8:
  498. X            sfmembase = 0x700000;
  499. X            break;
  500. X
  501. X            case 9:
  502. X            sfmembase = 0x800000;
  503. X            break;
  504. X
  505. X            case 10:
  506. X            sfmembase = 0x900000;
  507. X            break;
  508. X
  509. X            case 11:
  510. X            sfmembase = 0xC00000;
  511. X            break;
  512. X
  513. X            case 12:
  514. X            sfmembase = 0xC40000;
  515. X            break;
  516. X
  517. X            case 13:
  518. X            sfmembase = 0xC80000;
  519. X            break;
  520. X
  521. X            case 14:
  522. X            sfmembase = 0xCC0000;
  523. X            break;
  524. X
  525. X            case 15:
  526. X            sfmembase = 0xD00000;
  527. X            break;
  528. X            }
  529. X            /* end of switch ( SF Addr itemnum ) */
  530. X        break;
  531. X
  532. X        case 7:
  533. X        if (mode == WARPS)  mmode = TRUE ;
  534. X        switch( itemnum ) {
  535. X            case 0:
  536. X            fmemsize = 0x000000;
  537. X            break;
  538. X
  539. X            case 1:
  540. X            fmemsize = 0x040000;
  541. X            break;
  542. X
  543. X            case 2:
  544. X            fmemsize = 0x080000;
  545. X            break;
  546. X
  547. X            case 3:
  548. X            fmemsize = 0x0C0000;
  549. X            break;
  550. X
  551. X            case 4:
  552. X            fmemsize = 0x100000;
  553. X            break;
  554. X
  555. X            case 5:
  556. X            fmemsize = 0x200000;
  557. X            break;
  558. X
  559. X            case 6:
  560. X            fmemsize = 0x300000;
  561. X            break;
  562. X
  563. X            case 7:
  564. X            fmemsize = 0x400000;
  565. X            break;
  566. X
  567. X            case 8:
  568. X            fmemsize = 0x600000;
  569. X            break;
  570. X
  571. X            case 9:
  572. X            fmemsize = 0x800000;
  573. X            break;
  574. X
  575. X            case 10:
  576. X            fmemsize = 0xa000000;
  577. X            break;
  578. X
  579. X            case 11:
  580. X            fmemsize = 0xc00000;
  581. X            break;
  582. X
  583. X            case 12:
  584. X            fmemsize = 0xd00000;
  585. X            break;
  586. X
  587. X            case 13:
  588. X            fmemsize = 0xe00000;
  589. X            break;
  590. X
  591. X            case 14:
  592. X            fmemsize = 0xf00000;
  593. X            break;
  594. X
  595. X            case 15:
  596. X            fmemsize = 0x1000000;
  597. X            break;
  598. X            }
  599. X            /* end of switch ( Fast Size itemnum ) */
  600. X        break;
  601. X
  602. X        case 8:
  603. X        if (mode == WARPS)  mmode = TRUE ;
  604. X        switch( itemnum ) {
  605. X            case 0:
  606. X            fmembase = 0x200000;
  607. X            break;
  608. X
  609. X            case 1:
  610. X            fmembase = 0x300000;
  611. X            break;
  612. X
  613. X            case 2:
  614. X            fmembase = 0x400000;
  615. X            break;
  616. X
  617. X            case 3:
  618. X            fmembase = 0x500000;
  619. X            break;
  620. X
  621. X            case 4:
  622. X            fmembase = 0x600000;
  623. X            break;
  624. X
  625. X            case 5:
  626. X            fmembase = 0x800000;
  627. X            break;
  628. X
  629. X            case 6:
  630. X            fmembase = 0x7f0000;
  631. X            break;
  632. X
  633. X            case 7:
  634. X            fmembase = 0x7e0000;
  635. X            break;
  636. X
  637. X            case 8:
  638. X            fmembase = 0x7d00000;
  639. X            break;
  640. X
  641. X            case 9:
  642. X            fmembase = 0x7c00000;
  643. X            break;
  644. X
  645. X            case 10:
  646. X            fmembase = 0x7a00000;
  647. X            break;
  648. X
  649. X            case 11:
  650. X            fmembase = 0x7800000;
  651. X            break;
  652. X
  653. X            case 12:
  654. X            fmembase = 0x7600000;
  655. X            break;
  656. X
  657. X            case 13:
  658. X            fmembase = 0x7400000;
  659. X            break;
  660. X
  661. X            case 14:
  662. X            fmembase = 0x7200000;
  663. X            break;
  664. X
  665. X            case 15:
  666. X            fmembase = 0x7000000;
  667. X            break;
  668. X            }
  669. X            /* end of switch ( Fast Addr itemnum ) */
  670. X        break;
  671. X        }
  672. X        /* end of switch ( menunum ) */
  673. X}
  674. X
  675. Xvoid wrack_sploot() /* this subprogram cashes in the chips in bad times */
  676. X    {
  677. X    if (log != 0) {
  678. X        if (log & SA) {
  679. X            (void) FreeMem(oldcsum, (long)(sizeof(ULONG) * warps)) ;
  680. X            log = log & CA ;
  681. X            }
  682. X        if (log & S8) {
  683. X            (void) FreeMem(csum, (long)(sizeof(ULONG) * warps)) ;
  684. X            log = log & C8 ;
  685. X            }
  686. X        if (log & S4)  {
  687. X            (void) FreeMem(sizev, (long)(sizeof(long) * frags)) ;
  688. X            log = log & C4 ;
  689. X            }
  690. X        if (log & S2)  {
  691. X            (void) FreeMem(chunkv, (long)(sizeof(long) * frags)) ;
  692. X            log = log & C2 ;
  693. X            }
  694. X        if (log & S1) {
  695. X            (void) FreeMem(cell, (long)(sizeof(USHORT) * warps)) ;
  696. X            log = log & C1 ;
  697. X            }
  698. X        frags = 0;
  699. X        warps = 0;
  700. X        }
  701. X}
  702. X
  703. XSetTimer(sec, micro, timermsg)
  704. XULONG sec, micro;
  705. Xstruct IOStdReq *timermsg;
  706. X/* This routine simply sets the timer to interrupt us after secs.micros */
  707. X{
  708. X    timermsg->io_Command = TR_ADDREQUEST;    /* add a new timer request */
  709. X    timermsg->io_Actual = sec;    /* seconds */
  710. X    timermsg->io_Length = micro;    /* microseconds */
  711. X    SendIO(timermsg);   /* post a request to the timer */
  712. X}
  713. X
  714. Xvoid cleanup() {
  715. X    if (timerport) {
  716. X        Wait(timerbit);
  717. X        GetMsg(timerport);
  718. X        CloseDevice(timermsg);
  719. X        DeleteStdIO(timermsg);
  720. X        DeletePort(timerport);
  721. X        }
  722. X    if (GfxBase)        CloseLibrary(GfxBase) ;
  723. X    if (window)         CloseWindow(window) ;
  724. X    if (IntuitionBase)  CloseLibrary(IntuitionBase) ;
  725. X    wrack_sploot() ;
  726. X    exit(AARRRGH) ;
  727. X}
  728. X
  729. Xvoid inittimer() {
  730. X    if(!(timerport = (struct MsgPort *)CreatePort(0L, 0L)))cleanup();
  731. X    if(!(timermsg = (struct IOStdReq *)CreateStdIO(timerport)))cleanup();
  732. X    if (OpenDevice(TIMERNAME, UNIT_VBLANK, timermsg, 0L))cleanup();
  733. X
  734. X    timerbit = 1L << timerport->mp_SigBit ;
  735. X    SetTimer(1L, 0L, timermsg); /* set for first message */
  736. X}
  737. X
  738. Xvoid handle_NEWSIZE() /* short term allocations cashed in then realloc'd */
  739. X    {                 /* when user hits gadget but doesn't resize window */
  740. X    if (log & SA)  {
  741. X        (void) FreeMem(oldcsum, (long)(sizeof(ULONG) * warps)) ;
  742. X        log = log & CA ;
  743. X        }
  744. X    if (log & S8)  {
  745. X        (void) FreeMem(csum, (long)(sizeof(ULONG) * warps)) ;
  746. X        log = log & C8 ;
  747. X        }
  748. X    if (log & S1)  {
  749. X        (void) FreeMem(cell, (long)(sizeof(USHORT) * warps)) ;
  750. X        log = log & C1 ;
  751. X    barh = window->Height - SIZEGAD - DRAGBAR ;  /* recalculate height */
  752. X    barb = window->Height - SIZEGAD - 1 ; /* get new bar base position */
  753. X    warps = barh + 1 ;       /* number of storage cells to be reserved */
  754. X    if ((cell = (USHORT *)AllocMem((long)sizeof(USHORT) * warps,
  755. X                                    MEMF_PUBLIC)) != 0L ) log = log | S1;
  756. X    if ((csum = (ULONG *)AllocMem((long)sizeof(ULONG) * warps,
  757. X                                    MEMF_PUBLIC)) != 0L ) log = log | S8;
  758. X    if ((oldcsum = (ULONG *)AllocMem((long)sizeof(ULONG) * warps,
  759. X                                    MEMF_PUBLIC)) != 0L ) log = log | SA;
  760. X    if (log != SOK)  {      /* bail out if we didn't get an allocation */
  761. X        wrack_sploot() ;
  762. X        things_are_cool = FALSE ;     /* tell _main that we're leaving */
  763. X        }
  764. X    e_text.TopEdge = barb + BORDER ;        /* set the E text position */
  765. X    intsig = FALSE ;
  766. X    }
  767. X}
  768. X
  769. Xvoid handle_MESSAGES()  {
  770. X    unsigned long class;
  771. X    unsigned int code, qual;
  772. X
  773. X    /* Wait (1L << window->UserPort->mp_SigBit); this is rediculous! */
  774. X    while ((message=(struct IntuiMessage *)GetMsg(window->UserPort))
  775. X                                                                != 0L) {
  776. X        class = message->Class ;
  777. X        code = message->Code ;
  778. X        qual = message->Qualifier ;
  779. X        ReplyMsg ;
  780. X        ticker = 0 ;        /* cut short the timer to expedite service */
  781. X        switch( class ) {
  782. X            case MENUPICK:
  783. X            handle_MENUPICK( class, code ) ;    /* do menus ASAP */
  784. X            break ;
  785. X
  786. X            case NEWSIZE:
  787. X            intsig = TRUE ;                     /* resize when done here */
  788. X            break ;
  789. X            }
  790. X        }
  791. X}
  792. X
  793. Xvoid memmometer()                /* this subprogram draws the bar graphs */
  794. X    {
  795. X    long i;
  796. X    long y;
  797. X
  798. X    (void) handle_MESSAGES() ;  /* go see if the user wants anything */
  799. X    i = 0 ;
  800. X    while ((i < barh) && (intsig == FALSE)) {
  801. X        y = barb - i ;
  802. X        SetAPen(window->RPort, (long)cell[i]);
  803. X        Move(window->RPort, xl, y);
  804. X        Draw(window->RPort, xr, y);
  805. X        i++ ;
  806. X        }
  807. X}
  808. X
  809. Xvoid shake()    /* this subprogram slings down the mercury column */
  810. X    {
  811. X    int i;
  812. X
  813. X    for (i = 0; i < barh; i++)  {
  814. X        cell[i] = YELP ;
  815. X        }
  816. X}
  817. X
  818. Xvoid lockout()  /* this subprogram renders a whole column in border colors */
  819. X    {
  820. X    (void) handle_MESSAGES() ;        /* go see if the user wants anything */
  821. X    if (intsig == FALSE)  {
  822. X        SetAPen(window->RPort, WHTP) ;          /* set in the border color */
  823. X        RectFill(window->RPort, xl, (barb - barh + 1), xr, barb) ; /* fill */
  824. X        }
  825. X}
  826. X
  827. Xvoid updatewarps( wf, membase, memseg )  /* this subprogram finds changes */
  828. Xshort wf;
  829. Xlong membase, memseg ;
  830. X    {
  831. X    register long i ;
  832. X    register ULONG r ;
  833. X    register ULONG delta ;
  834. X    register ULONG *a ;
  835. X
  836. X    if (memseg == 0) {
  837. X        (void) lockout() ;
  838. X        return ;
  839. X        }
  840. X    else (void) shake() ;
  841. X
  842. X    delta = (ULONG)(memseg & EVENMASK) ;  /* try to avoid odd address trap */
  843. X    r = (ULONG)(membase & EVENMASK) ;     /* prefer wrong address to death */
  844. X    for (i = 0; i < barh; i++)  {
  845. X        csum[i] = 0 ;
  846. X        }
  847. X    for (i = 0; i < barh; i++)  {
  848. X        for (a = (ULONG *)r; a < (ULONG *)(r + delta); a++)  {
  849. X            csum[i] ^= *a ;
  850. X            }
  851. X        if (oldcsum[i] != 0)  cell[i] ^= GRNP ;       /* enters with pens  */
  852. X        if (csum[i] == oldcsum[i])  cell[i] &= GRNP ; /* all on, condition */
  853. X        if (csum[i] == 0)  cell[i] ^= CYNP ;          /* detected clears a */
  854. X        if (oldcsum[i] == 0xffffffff) cell[i] = CYNP ;/* pen; at the end a */
  855. X        if (csum[i] == 0xffffffff)  cell[i] = GRNP ;  /* logical true sets */
  856. X        oldcsum[i] = csum[i] ;                        /* a pen not yet set */
  857. X        r += delta ;
  858. X        }
  859. X    (void) memmometer();
  860. X}
  861. X
  862. Xvoid updatescreen( wf, membase, memseg )
  863. Xshort wf;
  864. Xlong membase, memseg;
  865. X    {
  866. X    register long size ;
  867. X    register struct MemHeader *hdr ;
  868. X    register struct MemChunk *chunk ;
  869. X    extern struct ExecBase *SysBase ;
  870. X    register long *which ;                /* active memlist chunk pointer */
  871. X    register long newlimit ;  /* number of chunks, incl 1 null chunk, + 1 */
  872. X    register long newfrags ;  /* number of chunks, incl null chunks, + 1  */
  873. X    long newsize ;  /* size of next request for chunkv/sizev memory, + 1  */
  874. X    int i, j, k, l ;
  875. X    int length ;       /* length is number of chunks to be processed, + 1 */
  876. X    BOOL cf, nf ;      /* cf is "chip flag" nf is "null chunk found" flag */
  877. X
  878. X    if (memseg == 0) {
  879. X        (void) lockout() ;
  880. X        return;
  881. X        }
  882. X    else (void) shake() ;
  883. X
  884. X    for (i = 0; i < 3; i++) {
  885. X        chip[i] = 0;
  886. X        fast[i] = 0;
  887. X        }
  888. X    for (i = 0; i < frags; i++) {
  889. X        chunkv[i] = 0;
  890. X        sizev[i] = 0;
  891. X        }
  892. X    newfrags = 0 ;
  893. X    newlimit = 0 ;
  894. X    nf = FALSE;
  895. X    Forbid() ;
  896. X    hdr = (struct MemHeader *) SysBase->MemList.lh_Head ;
  897. X    while (hdr->mh_Node.ln_Succ) {
  898. X        if (hdr->mh_Attributes & MEMF_CHIP) {
  899. X            which = chip ;
  900. X            cf = TRUE;
  901. X            }
  902. X        else {
  903. X            which = fast ;
  904. X            cf = FALSE;
  905. X            }
  906. X        if (((cf == TRUE) && (wf == 0)) || ((cf == FALSE) && (wf > 0)))  {
  907. X            for (chunk = hdr->mh_First; chunk; chunk = chunk->mc_Next) {
  908. X                if (which[1] < frags)  chunkv[which[1]++] = (unsigned long)chunk ;
  909. X                size = chunk->mc_Bytes ;
  910. X                if (which[2] < frags)  sizev[which[2]++] = (unsigned long)size;
  911. X                *which += size ;
  912. X                if (nf == FALSE)  {
  913. X                    newlimit++ ;
  914. X                    if (chunkv[newfrags] == NULL)  {
  915. X                        nf = TRUE;
  916. X                        }
  917. X                    }
  918. X                newfrags++ ;
  919. X            }
  920. X        }
  921. X        hdr = (struct MemHeader *)hdr->mh_Node.ln_Succ ;
  922. X        }
  923. X    Permit() ;
  924. X    length = frags ;
  925. X    if (newlimit < frags)  length = newlimit ;
  926. X    for (i = 0; i < length; i++)  {
  927. X        chunkv[i] -= membase;   /* chunkv is now array offset from base   */
  928. X        sizev[i] += chunkv[i];  /* and sizev is now address of array top  */
  929. X        chunkv[i] = chunkv[i] / memseg;  /* this is the number of pixels  */
  930. X        sizev[i] = sizev[i] / memseg;       /* and this is the top pixel  */
  931. X        if (chunkv[i] < 0) chunkv[i] = 0 ;  /* we do some bounds checking */
  932. X        if (sizev[i] < 0) sizev[i] = 0 ;
  933. X        if (chunkv[i] >= barh) chunkv[i] = barh - 1 ;
  934. X        if (sizev[i] >= barh) sizev[i] = barh - 1 ;
  935. X        if (sizev[i] - chunkv[i] < 0)  sizev[i] = chunkv[i] ;
  936. X        j = chunkv[i] ; /* from now on it will be less confusing if */
  937. X        k = sizev[i] ;  /* we assign some variables for this stuff  */
  938. X        if (sizev[i] - chunkv[i] == 0)  {
  939. X            cell[j] &= BLUP ;
  940. X            }
  941. X        else  {
  942. X            for (l = j; l < k; l++)  {
  943. X                cell[l] &= BLKP ;
  944. X                }
  945. X            }
  946. X        }
  947. X    (void) memmometer();
  948. X    newsize = frags ;
  949. X    while (newsize < newlimit)  {
  950. X        newsize += EXTENSION ;
  951. X        }
  952. X    if (newlimit > frags)  {
  953. X        (void) FreeMem(chunkv, (long)(sizeof(long) * frags));
  954. X        if ((chunkv = (unsigned long *)AllocMem((long)sizeof(long) * newsize,
  955. X                                        MEMF_PUBLIC)) == 0L )  {
  956. X            log = log & C2 ;
  957. X            }
  958. X        (void) FreeMem(sizev, (long)(sizeof(long) * frags));
  959. X        if ((sizev = (unsigned long *)AllocMem((long)sizeof(long) * newsize,
  960. X                                        MEMF_PUBLIC)) == 0L ) {
  961. X            (void) FreeMem(chunkv, (long)(sizeof(long) * newsize));
  962. X            log = log & C4 ;
  963. X            }
  964. X        if (log != SOK)  {
  965. X            wrack_sploot() ;
  966. X            things_are_cool = FALSE ;
  967. X            }
  968. X        else frags = newsize ;
  969. X        }
  970. X}
  971. X
  972. Xmain() {
  973. X    static struct IntuiText bodyText0 =
  974. X        {BLUP, WHTP, JAM2, 58, 10, NULL, NULL, NULL};
  975. X    static struct IntuiText bodyText1 =
  976. X        {BLUP, WHTP, JAM2, 42, 20, NULL, NULL, NULL};
  977. X    static struct IntuiText bodyText2 =
  978. X        {BLUP, WHTP, JAM2, 50, 30, NULL, NULL, NULL};
  979. X    static struct IntuiText positiveText =
  980. X        {BLUP, WHTP, JAM2, 7, 3, NULL, NULL, NULL};
  981. X    static struct IntuiText negativeText =
  982. X        {BLUP, WHTP, JAM2, 7, 3, NULL, NULL, NULL};
  983. X    struct IntuiMessage *message;
  984. X    ULONG class;
  985. X    USHORT code;
  986. X    ULONG wakeupbits;
  987. X    long syspri;
  988. X    char *nptr;
  989. X    struct Task *mmtcb;
  990. X    char oldpri;
  991. X    int t;
  992. X    int i;
  993. X    USHORT colflags;     /* keeps track of column positions and counts */
  994. X    USHORT left;         /* left   column, left edge */
  995. X    USHORT middle;       /* middle column, left edge */
  996. X    USHORT right;        /* right  column, left edge */
  997. X    USHORT barw;         /* width of each mercury column */
  998. X    USHORT wf;           /* memmometer window current column number */
  999. X    long cmemseg;
  1000. X    long sfmemseg;
  1001. X    long fmemseg;
  1002. X    long membase;
  1003. X    long memseg;
  1004. X    long memsize;
  1005. X
  1006. X    bodyText0.IText = (UBYTE *) "WARNING! CRASH POSSIBLE";
  1007. X    bodyText1.IText = (UBYTE *) "MENU MEMORY SELECTIONS MUST";
  1008. X    bodyText2.IText = (UBYTE *) "REFERENCE EXISTING MEMORY";
  1009. X    bodyText0.NextText = &bodyText1;
  1010. X    bodyText1.NextText = &bodyText2;
  1011. X    positiveText.IText = (UBYTE *) "Risk It";
  1012. X    negativeText.IText = (UBYTE *) "Retreat";
  1013. X
  1014. X    log = 0 ;
  1015. X    if ((cell = (USHORT *)AllocMem((long)sizeof(USHORT) * BARS,
  1016. X                                        MEMF_PUBLIC)) != 0L ) log = log | S1;
  1017. X    if ((chunkv = (ULONG *)AllocMem((long)sizeof(ULONG) * STARTVAL,
  1018. X                                        MEMF_PUBLIC)) != 0L ) log = log | S2;
  1019. X    if ((sizev = (ULONG *)AllocMem((long)sizeof(ULONG) * STARTVAL,
  1020. X                                        MEMF_PUBLIC)) != 0L ) log = log | S4;
  1021. X    if ((csum = (ULONG *)AllocMem((long)sizeof(ULONG) * BARS,
  1022. X                                        MEMF_PUBLIC)) != 0L ) log = log | S8;
  1023. X    if ((oldcsum = (ULONG *)AllocMem((long)sizeof(ULONG) * BARS,
  1024. X                                        MEMF_PUBLIC)) != 0L ) log = log | SA;
  1025. X    if (log != SOK)  {
  1026. X        wrack_sploot() ;
  1027. X        exit(AARRRGH) ;
  1028. X        }
  1029. X    if ((IntuitionBase = (struct IntuitionBase *)OpenLibrary(
  1030. X            "intuition.library",33L)) != NULL &&
  1031. X            (window=OpenWindow(&newwindow)) != NULL)  {
  1032. X        if ((GfxBase = (struct GfxBase *)OpenLibrary(
  1033. X                "graphics.library", 0L)) != NULL)  { 
  1034. X            (void) initmenus();
  1035. X            /* rp = window->RPort ; */
  1036. X            inittimer();
  1037. X            wf = 0;
  1038. X            mmode = FALSE ;
  1039. X            mode = FRAGS ;
  1040. X            delayval = p_rate ;
  1041. X            priority = p_priority ;
  1042. X            if (priority > 0)  priority = 0 ;
  1043. X            lastpri = priority ;
  1044. X            syspri = priority ;
  1045. X            nptr = NULL ;
  1046. X            mmtcb = FindTask( nptr ) ;
  1047. X            oldpri = SetTaskPri( mmtcb, syspri ) ;
  1048. X            cmemsize = p_chip << 10 ;
  1049. X            cmembase = p_chipa << 10 ;
  1050. X            sfmemsize = p_sf << 10 ;
  1051. X            sfmembase = p_sfa << 10 ;
  1052. X            if (p_fast >= 256)  fmemsize = p_fast << 10 ;
  1053. X            else fmemsize = p_fast << 20 ;
  1054. X            if (p_fasta <= 0)  fmembase = 0x8000000 - ((-1 * p_fasta) << 20) ;
  1055. X            else fmembase = p_fasta << 20 ;
  1056. X            while (things_are_cool == TRUE) {
  1057. X                if (chgflag != 0)  {
  1058. X                    chgflag = 0 ;
  1059. X                    colflags = 0 ;
  1060. X                    if (cmemsize != 0)  colflags = colflags | (1 << 0) ;
  1061. X                    if (sfmemsize != 0)  colflags = colflags | (1 << 1) ;
  1062. X                    if (fmemsize != 0)  colflags = colflags | (1 << 2) ;
  1063. X                    switch ( colflags ) {
  1064. X                        case 0:
  1065. X                        barw = (WINW - (2 * BORDER)) - 1 ;
  1066. X                        left = LEFT ;
  1067. X                        middle = 0 ;
  1068. X                        right = 0 ;
  1069. X                        f_text.FrontPen = ORNP ;
  1070. X                        break ;
  1071. X
  1072. X                        case 1:
  1073. X                        barw = (WINW - (2 * BORDER)) - 1 ;
  1074. X                        left = LEFT ;
  1075. X                        middle = 0 ;
  1076. X                        right = 0 ;
  1077. X                        f_text.FrontPen = BLUP ;
  1078. X                        break ;
  1079. X
  1080. X                        case 2:
  1081. X                        barw = (WINW - (2 * BORDER)) - 1 ;
  1082. X                        left = 0 ;
  1083. X                        middle = LEFT ;
  1084. X                        right = 0 ;
  1085. X                        f_text.FrontPen = CYNP ;
  1086. X                        break ;
  1087. X
  1088. X                        case 3:
  1089. X                        barw = ((WINW - (2 * BORDER)) / 2 ) - 1 ;
  1090. X                        left = LEFT ;
  1091. X                        middle = (left + barw + 1) ;
  1092. X                        right = 0 ;
  1093. X                        f_text.FrontPen = BLUP ;
  1094. X                        break ;
  1095. X
  1096. X                        case 4:
  1097. X                        barw = (WINW - (2 * BORDER)) - 1 ;
  1098. X                        left = 0 ;
  1099. X                        middle = 0;
  1100. X                        right = LEFT ;
  1101. X                        f_text.FrontPen = YELP ;
  1102. X                        break ;
  1103. X
  1104. X                        case 5:
  1105. X                        barw = ((WINW - (2 * BORDER)) / 2 ) - 1 ;
  1106. X                        left = LEFT ;
  1107. X                        middle = 0 ;
  1108. X                        right = (left + barw + 1) ;
  1109. X                        f_text.FrontPen = CYNP ;
  1110. X                        break ;
  1111. X
  1112. X                        case 6:
  1113. X                        barw = ((WINW - (2 * BORDER)) / 2 ) - 1 ;
  1114. X                        left = 0 ;
  1115. X                        middle = LEFT ;
  1116. X                        right = (middle + barw + 1) ;
  1117. X                        f_text.FrontPen = YELP ;
  1118. X                        break ;
  1119. X
  1120. X                        case 7:
  1121. X                        barw = ((WINW - (2 * BORDER)) / 3 ) - 1 ;
  1122. X                        left = LEFT ;
  1123. X                        middle = (left + barw + 1) ;
  1124. X                        right = (middle + barw + 1) ;
  1125. X                        f_text.FrontPen = BLUP ;
  1126. X                        break ;
  1127. X                        }  /* end of switch ( colflags ) */
  1128. X                    }  /* end of if ( chgflag ) */
  1129. X                cmemseg = cmemsize / barh ;
  1130. X                sfmemseg = sfmemsize / barh ;
  1131. X                fmemseg = fmemsize / barh ;
  1132. X                if (mmode == TRUE && ((sfmemsize != 0) ||
  1133. X                                      (fmemsize != 0)))  {
  1134. X                    /* Keep your eyes open here.  If we get a negative    */
  1135. X                    /* response from the requester, that means either the */
  1136. X                    /* user retreated, or a no-requester function such as */
  1137. X                    /* noreq or KillReq has selected the negative option. */
  1138. X                    /* If such functions select the positive option they  */
  1139. X                    /* force acceptance of the crash risk for Warps mode. */
  1140. X
  1141. X                    mode = AutoRequest(window, &bodyText0, &positiveText,
  1142. X                               &negativeText, 0L, 0L, 319L, 79L) ;
  1143. X                    if (mode == FALSE)  {      /* user Retreat selection  */
  1144. X                        sfmemseg = 0 ;         /* results in execution of */
  1145. X                        sfmemsize = 0 ;        /* this code segment which */
  1146. X                        fmemseg = 0 ;          /* resets to safer values  */
  1147. X                        fmemsize = 0 ;         /* resets to safer values  */
  1148. X                        }
  1149. X                    }
  1150. X                switch ( wf ) {
  1151. X                    case 0:
  1152. X                    xl = left ;
  1153. X                    membase = cmembase ;
  1154. X                    memseg = cmemseg ;
  1155. X                    memsize = cmemsize ;
  1156. X                    break;
  1157. X
  1158. X                    case 1:
  1159. X                    xl = middle ;
  1160. X                    membase = sfmembase ;
  1161. X                    memseg = sfmemseg ;
  1162. X                    memsize = sfmemsize ;
  1163. X                    break;
  1164. X
  1165. X                    case 2:
  1166. X                    xl = right ;
  1167. X                    membase = fmembase ;
  1168. X                    memseg = fmemseg ;
  1169. X                    memsize = fmemsize ;
  1170. X                    break;
  1171. X                    }  /* end of switch ( wf ) */
  1172. X                xr = xl + barw ;
  1173. X                if (mmode == TRUE)  {
  1174. X                    mode = WARPS ;
  1175. X                    mmode = FALSE ;
  1176. X                    }
  1177. X                if (xl != 0)  {
  1178. X                    if (intsig == TRUE)  {
  1179. X                        handle_NEWSIZE() ;
  1180. X                        }
  1181. X                    if (mode == WARPS)  {
  1182. X                        (void) updatewarps( wf, membase, memseg ) ;
  1183. X                        e_text.FrontPen = YELP ;
  1184. X                        }
  1185. X                    if (mode == FRAGS)  {
  1186. X                        (void) updatescreen( wf, membase, memseg ) ;
  1187. X                        e_text.FrontPen = BLUP ;
  1188. X                        }
  1189. X                    }
  1190. X                if (syspri != priority)  {
  1191. X                    syspri = priority ;
  1192. X                    nptr = NULL;
  1193. X                    mmtcb = FindTask( nptr ) ;
  1194. X                    oldpri = SetTaskPri( mmtcb, syspri ) ;
  1195. X                    }
  1196. X                if (wf == 2)  {
  1197. X                    PrintIText(window->RPort,&f_text,RTEXT,0L) ;
  1198. X                    while ( ticker > 0 )  {
  1199. X                        wakeupbits = Wait(timerbit) ;
  1200. X                        if (wakeupbits & timerbit)  {
  1201. X                            GetMsg(timerport);
  1202. X                            SetTimer(0L, TMARK, timermsg);
  1203. X                            }
  1204. X                        /* quick like, go see if the user wants anything */
  1205. X                        (void) handle_MESSAGES() ;
  1206. X                        ticker-- ;
  1207. X                        }
  1208. X                    ticker = delayval * TICKIES ;
  1209. X                    }
  1210. X                wf++ ;
  1211. X                if (wf >= 3)  wf = 0 ;
  1212. X                if (intsig == TRUE)  {
  1213. X                    handle_NEWSIZE() ;
  1214. X                    }
  1215. X                } /* end of while ( things_are_cool) */
  1216. X
  1217. X            if (timerport) {
  1218. X                Wait(timerbit);
  1219. X                GetMsg(timerport);
  1220. X                CloseDevice(timermsg);
  1221. X                DeleteStdIO(timermsg);
  1222. X                DeletePort(timerport);
  1223. X                }
  1224. X
  1225. X            if (GfxBase)    CloseLibrary(GfxBase) ;
  1226. X            }
  1227. X        if (window)         CloseWindow(window) ;
  1228. X        if (IntuitionBase)  CloseLibrary(IntuitionBase) ;
  1229. X        }
  1230. X    wrack_sploot() ;
  1231. X}
  1232. X
  1233. X_cli_parse() {}
  1234. X_wb_parse() {}
  1235. END_OF_FILE
  1236. if test 38693 -ne `wc -c <'mm.c'`; then
  1237.     echo shar: \"'mm.c'\" unpacked with wrong size!
  1238. fi
  1239. # end of 'mm.c'
  1240. fi
  1241. if test -f 'mminit.c' -a "${1}" != "-c" ; then 
  1242.   echo shar: Will not clobber existing file \"'mminit.c'\"
  1243. else
  1244. echo shar: Extracting \"'mminit.c'\" \(27558 characters\)
  1245. sed "s/^X//" >'mminit.c' <<'END_OF_FILE'
  1246. X/* : ai=0 bk=0 ts=8 */
  1247. X#include "mm.h"
  1248. X
  1249. X#define PROJMAX 3               /* number of project menu items */
  1250. X#define SETUPMAX 2              /* number of setup menu items */
  1251. X#define MODEMAX 2
  1252. X#define FREQMAX 4               /* number of frequency menu items */
  1253. X#define PRIOMAX 16              /* number of priority menu items */
  1254. X#define CHIPMAX 5               /* number of chip mem size menu items */
  1255. X#define CHIPAMAX 6              /* number of chip mem base addr menu items */
  1256. X#define SFMAX 11                /* number of sf mem size menu items */
  1257. X#define SFAMAX 16               /* number of sf mem base addr menu items */
  1258. X#define FASTMAX 16              /* number of fast mem size menu items */
  1259. X#define FASTAMAX 16             /* number of fast mem base addr menu items */
  1260. X#define MAXMENU 9               /* total number of top level menus */
  1261. X
  1262. Xextern BOOL p_mode;             /* preset frags mode = 0, warps mode = 1 */
  1263. Xextern long p_rate;             /* preset sample interval, secs see menu */
  1264. Xextern long p_priority;         /* preset priority, range -100 to +100   */
  1265. Xextern long p_chip;             /* preset chip mem size, kbytes see menu */
  1266. Xextern long p_chipa;            /* preset chip mem address, kb  see menu */
  1267. Xextern long p_sf;               /* preset slowfast mem size, kb see menu */
  1268. Xextern long p_sfa;              /* preset slowfast mem addr, kb see menu */
  1269. Xextern long p_fast;             /* preset fast mem size, mbytes see menu */
  1270. Xextern long p_fasta;            /* preset fast mem addr, mbytes see menu */
  1271. X
  1272. X/******************************************************/
  1273. X/*    Structure declarations for the menu sections    */
  1274. X/******************************************************/
  1275. X
  1276. Xstruct   MenuItem ProjItem[PROJMAX];
  1277. Xstruct   IntuiText ProjText[PROJMAX];
  1278. Xstruct   MenuItem SetupItem[SETUPMAX];
  1279. Xstruct   IntuiText SetupText[SETUPMAX];
  1280. Xstruct   MenuItem ModeItem[MODEMAX];
  1281. Xstruct   IntuiText ModeText[MODEMAX];
  1282. Xstruct   MenuItem FreqItem[FREQMAX];
  1283. Xstruct   IntuiText FreqText[FREQMAX];
  1284. Xstruct   MenuItem PrioItem[PRIOMAX];
  1285. Xstruct   IntuiText PrioText[PRIOMAX];
  1286. Xstruct   MenuItem ChipItem[CHIPMAX];
  1287. Xstruct   IntuiText ChipText[CHIPMAX];
  1288. Xstruct   MenuItem ChipAItem[CHIPAMAX];
  1289. Xstruct   IntuiText ChipAText[CHIPAMAX];
  1290. Xstruct   MenuItem SFItem[SFMAX];
  1291. Xstruct   IntuiText SFText[SFMAX];
  1292. Xstruct   MenuItem SFAItem[SFAMAX];
  1293. Xstruct   IntuiText SFAText[SFAMAX];
  1294. Xstruct   MenuItem FastItem[FASTMAX];
  1295. Xstruct   IntuiText FastText[FASTMAX];
  1296. Xstruct   MenuItem FastAItem[FASTAMAX];
  1297. Xstruct   IntuiText FastAText[FASTAMAX];
  1298. Xstruct   Menu menu[MAXMENU];
  1299. X
  1300. X/*****************************************************************/
  1301. X/*    The following function initializes the structure arrays    */
  1302. X/*    needed to provide the Project menu topic.                  */
  1303. X/*    this was left retro-compatible with Manx 3.4a (nplus1)     */
  1304. X/*****************************************************************/
  1305. Xvoid InitProjItems()
  1306. X    {
  1307. X    int       n,nplus1;
  1308. X
  1309. X/* initialize each menu item and IntuiText with loop */
  1310. Xfor( n=0; n<PROJMAX; n++ )
  1311. X    {
  1312. X    nplus1 = n + 1;
  1313. X    ProjItem[n].NextItem = &ProjItem[nplus1];
  1314. X    ProjItem[n].LeftEdge = 0;
  1315. X    ProjItem[n].TopEdge = 9 * n;
  1316. X    ProjItem[n].Width = 64;
  1317. X    ProjItem[n].Height = 9;
  1318. X    ProjItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP;
  1319. X    ProjItem[n].MutualExclude = 0;
  1320. X    ProjItem[n].ItemFill = (APTR)&ProjText[n];
  1321. X    ProjItem[n].SelectFill = NULL;
  1322. X    ProjItem[n].Command = 0;
  1323. X    ProjItem[n].SubItem = NULL;
  1324. X    ProjItem[n].NextSelect = 0;
  1325. X
  1326. X    ProjText[n].FrontPen = BLUP;
  1327. X    ProjText[n].BackPen = WHTP;
  1328. X    ProjText[n].DrawMode = JAM2;/* render in fore and background */
  1329. X    ProjText[n].LeftEdge = 0;
  1330. X    ProjText[n].TopEdge = 1;
  1331. X    ProjText[n].ITextFont = NULL;
  1332. X    ProjText[n].NextText = NULL;
  1333. X    }
  1334. XProjItem[PROJMAX-1].NextItem = NULL;
  1335. X
  1336. X/* initialize text for specific menu items */
  1337. X
  1338. XProjText[0].IText = (UBYTE *)"Front";
  1339. XProjText[1].IText = (UBYTE *)"Back";
  1340. XProjText[2].IText = (UBYTE *)"Quit";
  1341. X}
  1342. X
  1343. X/*****************************************************************/
  1344. X/*    The following initializes the structure arrays             */
  1345. X/*   needed to provide the Setup menu topic.                     */
  1346. X/*****************************************************************/
  1347. X
  1348. Xvoid InitSetupItems()
  1349. X    {
  1350. X    int       n,nplus1;
  1351. X
  1352. X/* initialize each menu item and IntuiText with loop */
  1353. Xfor( n=0; n<SETUPMAX; n++ )
  1354. X    {
  1355. X    nplus1 = n + 1;
  1356. X    SetupItem[n].NextItem = &SetupItem[nplus1];
  1357. X    SetupItem[n].LeftEdge = 0;
  1358. X    SetupItem[n].TopEdge = 9 * n;
  1359. X    SetupItem[n].Width = 44;
  1360. X    SetupItem[n].Height = 9;
  1361. X    SetupItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP ;
  1362. X    SetupItem[n].MutualExclude = 0;
  1363. X    SetupItem[n].ItemFill = (APTR)&SetupText[n];
  1364. X    SetupItem[n].SelectFill = NULL;
  1365. X    SetupItem[n].Command = 0;
  1366. X    SetupItem[n].NextSelect = 0;
  1367. X
  1368. X    SetupText[n].FrontPen = BLUP;
  1369. X    SetupText[n].BackPen = WHTP;
  1370. X    SetupText[n].DrawMode = JAM2;    
  1371. X    SetupText[n].LeftEdge = 0;
  1372. X    SetupText[n].TopEdge = 1;
  1373. X    SetupText[n].ITextFont = NULL;
  1374. X    SetupText[n].NextText = NULL;
  1375. X    }
  1376. XSetupItem[SETUPMAX-1].NextItem = NULL;
  1377. X
  1378. XSetupText[0].IText = (UBYTE *)"Mode";
  1379. XSetupItem[0].SubItem = ModeItem;
  1380. XSetupText[1].IText = (UBYTE *)"Freq";
  1381. XSetupItem[1].SubItem = FreqItem;
  1382. X
  1383. X/*****************************************************************/
  1384. X/*    The following initializes the structure arrays             */
  1385. X/*   needed to provide the Mode submenu topic.                   */
  1386. X/*****************************************************************/
  1387. X
  1388. Xfor( n=0; n<MODEMAX; n++ )
  1389. X    {
  1390. X    nplus1 = n + 1;
  1391. X    ModeItem[n].NextItem = &ModeItem[nplus1];
  1392. X    ModeItem[n].LeftEdge = 38;
  1393. X    ModeItem[n].TopEdge = 9 * n;
  1394. X    ModeItem[n].Width = 72;
  1395. X    ModeItem[n].Height = 9;
  1396. X    ModeItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1397. X    ModeItem[n].MutualExclude = (~(1 << n));
  1398. X    ModeItem[n].ItemFill = (APTR)&ModeText[n];
  1399. X    ModeItem[n].SelectFill = NULL;
  1400. X    ModeItem[n].Command = 0;
  1401. X    ModeItem[n].SubItem = NULL;
  1402. X    ModeItem[n].NextSelect = 0;
  1403. X
  1404. X    ModeText[n].FrontPen = BLUP;
  1405. X    ModeText[n].BackPen = WHTP;
  1406. X    ModeText[n].DrawMode = JAM2;     /* render in fore and background */
  1407. X    ModeText[n].LeftEdge = 0;
  1408. X    ModeText[n].TopEdge = 1;
  1409. X    ModeText[n].ITextFont = NULL;
  1410. X    ModeText[n].NextText = NULL;
  1411. X    }
  1412. XModeItem[MODEMAX-1].NextItem = NULL;
  1413. X
  1414. X/* select mode subitem checked */
  1415. Xswitch (p_mode) {
  1416. X    case 0:     n = 0; break;
  1417. X    case 1:     n = 1; break;
  1418. X    default:    n = 1; p_mode = FALSE;
  1419. X    }
  1420. XModeItem[n].Flags |= CHECKED;
  1421. X
  1422. X/* initialize text for specific submenu items */
  1423. XModeText[0].IText = (UBYTE *)"   Frags";
  1424. XModeText[1].IText = (UBYTE *)"   Warps";
  1425. X
  1426. X/*****************************************************************/
  1427. X/*    The following initializes the structure arrays             */
  1428. X/*   needed to provide the Freq submenu topic.                   */
  1429. X/*****************************************************************/
  1430. X
  1431. Xfor( n=0; n<FREQMAX; n++ )
  1432. X    {
  1433. X    nplus1 = n + 1;
  1434. X    FreqItem[n].NextItem = &FreqItem[nplus1];
  1435. X    FreqItem[n].LeftEdge = 38;
  1436. X    FreqItem[n].TopEdge = 9 * n;
  1437. X    FreqItem[n].Width = 88;
  1438. X    FreqItem[n].Height = 9;
  1439. X    FreqItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1440. X    FreqItem[n].MutualExclude = (~(1 << n));
  1441. X    FreqItem[n].ItemFill = (APTR)&FreqText[n];
  1442. X    FreqItem[n].SelectFill = NULL;
  1443. X    FreqItem[n].Command = 0;
  1444. X    FreqItem[n].SubItem = NULL;
  1445. X    FreqItem[n].NextSelect = 0;
  1446. X
  1447. X    FreqText[n].FrontPen = BLUP;
  1448. X    FreqText[n].BackPen = WHTP;
  1449. X    FreqText[n].DrawMode = JAM2;     /* render in fore and background */
  1450. X    FreqText[n].LeftEdge = 0;
  1451. X    FreqText[n].TopEdge = 1;
  1452. X    FreqText[n].ITextFont = NULL;
  1453. X    FreqText[n].NextText = NULL;
  1454. X    }
  1455. XFreqItem[FREQMAX-1].NextItem = NULL;
  1456. X
  1457. X/* select frequency item checked */
  1458. Xswitch (p_rate) {
  1459. X    case 1:     n = 0; break;
  1460. X    case 2:     n = 1; break;
  1461. X    case 5:     n = 2; break;
  1462. X    case 10:    n = 3; break;
  1463. X    default:    n = 1; p_rate = 2;
  1464. X    }
  1465. XFreqItem[n].Flags |= CHECKED;
  1466. X
  1467. X/* initialize text for specific menu items */
  1468. XFreqText[0].IText = (UBYTE *)"    1 Sec ";
  1469. XFreqText[1].IText = (UBYTE *)"    2 Secs";
  1470. XFreqText[2].IText = (UBYTE *)"    5 Secs";
  1471. XFreqText[3].IText = (UBYTE *)"   10 Secs";
  1472. X}
  1473. X
  1474. X/*****************************************************************/
  1475. X/*    The following initializes the structure arrays             */
  1476. X/*   needed to provide the Priority menu topic.                  */
  1477. X/*****************************************************************/
  1478. X
  1479. Xvoid InitPrioItems()
  1480. X    {
  1481. X    int       n,nplus1;
  1482. X
  1483. X/* initialize each menu item and IntuiText with loop */
  1484. Xfor( n=0; n<PRIOMAX; n++ )
  1485. X    {
  1486. X    nplus1 = n + 1;
  1487. X    PrioItem[n].NextItem = &PrioItem[nplus1];
  1488. X    PrioItem[n].LeftEdge = 0;
  1489. X    PrioItem[n].TopEdge = 9 * n;
  1490. X    PrioItem[n].Width = 80;
  1491. X    PrioItem[n].Height = 9;
  1492. X    PrioItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1493. X    PrioItem[n].MutualExclude = (~(1 << n));
  1494. X    if (n < 3)  PrioItem[n].MutualExclude &= 0x0007;
  1495. X    if (n < 1)  PrioItem[n].MutualExclude |= 0x0007;
  1496. X    PrioItem[n].ItemFill = (APTR)&PrioText[n];
  1497. X    PrioItem[n].SelectFill = NULL;
  1498. X    PrioItem[n].Command = 0;
  1499. X    PrioItem[n].NextSelect = 0;
  1500. X
  1501. X    PrioText[n].FrontPen = BLUP;
  1502. X    PrioText[n].BackPen = WHTP;
  1503. X    if (n > 11)  {
  1504. X        PrioText[n].FrontPen = ORNP;
  1505. X        PrioText[n].BackPen = REDP;
  1506. X        }
  1507. X    PrioText[n].DrawMode = JAM2;    
  1508. X    PrioText[n].LeftEdge = 0;
  1509. X    PrioText[n].TopEdge = 1;
  1510. X    PrioText[n].ITextFont = NULL;
  1511. X    PrioText[n].NextText = NULL;
  1512. X    }
  1513. XPrioItem[PRIOMAX-1].NextItem = NULL;
  1514. X
  1515. X/* select priority item checked */
  1516. Xswitch (p_priority) {
  1517. X    case  -99:     n =  3; break;
  1518. X    case  -75:     n =  4; break;
  1519. X    case  -50:     n =  5; break;
  1520. X    case  -25:     n =  6; break;
  1521. X    case  -20:     n =  7; break;
  1522. X    case  -15:     n =  8; break;
  1523. X    case  -10:     n =  9; break;
  1524. X    case   -5:     n = 10; break;
  1525. X    case    0:     n = 11; break;
  1526. X    case    5:     n = 12; break;
  1527. X    case   10:     n = 13; break;
  1528. X    case   15:     n = 14; break;
  1529. X    case   20:     n = 15; break;
  1530. X    default:       n = 11; p_priority = 0;
  1531. X    }
  1532. XPrioItem[n].Flags |= CHECKED;
  1533. X
  1534. XPrioText[ 0].IText = (UBYTE *)"   NORM   ";
  1535. XPrioText[ 1].IText = (UBYTE *)"   DECR   ";
  1536. XPrioText[ 2].IText = (UBYTE *)"   INCR   ";
  1537. XPrioText[ 3].IText = (UBYTE *)"   -99    ";
  1538. XPrioText[ 4].IText = (UBYTE *)"   -75    ";
  1539. XPrioText[ 5].IText = (UBYTE *)"   -50    ";
  1540. XPrioText[ 6].IText = (UBYTE *)"   -25    ";
  1541. XPrioText[ 7].IText = (UBYTE *)"   -20    ";
  1542. XPrioText[ 8].IText = (UBYTE *)"   -15    ";
  1543. XPrioText[ 9].IText = (UBYTE *)"   -10    ";
  1544. XPrioText[10].IText = (UBYTE *)"   -5     ";
  1545. XPrioText[11].IText = (UBYTE *)"    0     ";
  1546. XPrioText[12].IText = (UBYTE *)"    5     ";
  1547. XPrioText[13].IText = (UBYTE *)"    10    ";
  1548. XPrioText[14].IText = (UBYTE *)"    15    ";
  1549. XPrioText[15].IText = (UBYTE *)"    20    ";
  1550. X}
  1551. X
  1552. X/*****************************************************************/
  1553. X/*    The following initializes the structure arrays             */
  1554. X/*   needed to provide the Chip Mem Size menu topic.             */
  1555. X/*****************************************************************/
  1556. X
  1557. Xvoid InitChipItems()
  1558. X    {
  1559. X    int       n,nplus1;
  1560. X
  1561. X/* initialize each menu item and IntuiText with loop */
  1562. Xfor( n=0; n<CHIPMAX; n++ )
  1563. X    {
  1564. X    nplus1 = n + 1;
  1565. X    ChipItem[n].NextItem = &ChipItem[nplus1];
  1566. X    ChipItem[n].LeftEdge = 0;
  1567. X    ChipItem[n].TopEdge = 9 * n;
  1568. X    ChipItem[n].Width = 80;
  1569. X    ChipItem[n].Height = 9;
  1570. X    ChipItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1571. X    ChipItem[n].MutualExclude = (~(1 << n));
  1572. X    ChipItem[n].ItemFill = (APTR)&ChipText[n];
  1573. X    ChipItem[n].SelectFill = NULL;
  1574. X    ChipItem[n].Command = 0;
  1575. X    ChipItem[n].NextSelect = 0;
  1576. X
  1577. X    ChipText[n].FrontPen = BLUP;
  1578. X    ChipText[n].BackPen = WHTP;
  1579. X    ChipText[n].DrawMode = JAM2;    
  1580. X    ChipText[n].LeftEdge = 0;
  1581. X    ChipText[n].TopEdge = 1;
  1582. X    ChipText[n].ITextFont = NULL;
  1583. X    ChipText[n].NextText = NULL;
  1584. X    }
  1585. XChipItem[CHIPMAX-1].NextItem = NULL;
  1586. X
  1587. X/* select chip mem size item checked */
  1588. Xswitch (p_chip) {
  1589. X    case    0:     n = 0; break;
  1590. X    case  256:     n = 1; break;
  1591. X    case  512:     n = 2; break;
  1592. X    case 1024:     n = 3; break;
  1593. X    case 2048:     n = 4; break;
  1594. X    default:       n = 2; p_chip = 512;
  1595. X    }
  1596. XChipItem[n].Flags |= CHECKED;
  1597. X
  1598. XChipText[0].IText = (UBYTE *)"   NONE";
  1599. XChipText[1].IText = (UBYTE *)"   256K";
  1600. XChipText[2].IText = (UBYTE *)"   512K";
  1601. XChipText[3].IText = (UBYTE *)"   1 MB";
  1602. XChipText[4].IText = (UBYTE *)"   2 MB";
  1603. X}
  1604. X
  1605. X/*****************************************************************/
  1606. X/*    The following initializes the structure arrays             */
  1607. X/*   needed to provide the Chip Base Addr menu topic.            */
  1608. X/*****************************************************************/
  1609. X
  1610. Xvoid InitChipAItems()
  1611. X    {
  1612. X    int       n,nplus1;
  1613. X
  1614. X/* initialize each menu item and IntuiText with loop */
  1615. Xfor( n=0; n<CHIPAMAX; n++ )
  1616. X    {
  1617. X    nplus1 = n + 1;
  1618. X    ChipAItem[n].NextItem = &ChipAItem[nplus1];
  1619. X    ChipAItem[n].LeftEdge = 0;
  1620. X    ChipAItem[n].TopEdge = 9 * n;
  1621. X    ChipAItem[n].Width = 80;
  1622. X    ChipAItem[n].Height = 9;
  1623. X    ChipAItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1624. X    ChipAItem[n].MutualExclude = (~(1 << n));
  1625. X    ChipAItem[n].ItemFill = (APTR)&ChipAText[n];
  1626. X    ChipAItem[n].SelectFill = NULL;
  1627. X    ChipAItem[n].Command = 0;
  1628. X    ChipAItem[n].NextSelect = 0;
  1629. X
  1630. X    ChipAText[n].FrontPen = BLUP;
  1631. X    ChipAText[n].BackPen = WHTP;
  1632. X    ChipAText[n].DrawMode = JAM2;    
  1633. X    ChipAText[n].LeftEdge = 0;
  1634. X    ChipAText[n].TopEdge = 1;
  1635. X    ChipAText[n].ITextFont = NULL;
  1636. X    ChipAText[n].NextText = NULL;
  1637. X    }
  1638. XChipAItem[CHIPAMAX-1].NextItem = NULL;
  1639. X
  1640. X/* select chip base address item checked */
  1641. Xswitch (p_chipa) {
  1642. X    case    0:     n = 0; break;
  1643. X    case  256:     n = 1; break;
  1644. X    case  512:     n = 2; break;
  1645. X    case  768:     n = 3; break;
  1646. X    case 1024:     n = 4; break;
  1647. X    case 1536:     n = 5; break;
  1648. X    default:       n = 0; p_chipa = 0;
  1649. X    }
  1650. XChipAItem[n].Flags |= CHECKED;
  1651. X
  1652. XChipAText[0].IText = (UBYTE *)"   @   0K";
  1653. XChipAText[1].IText = (UBYTE *)"   @ 256K";
  1654. XChipAText[2].IText = (UBYTE *)"   @ 512K";
  1655. XChipAText[3].IText = (UBYTE *)"   @ 768K";
  1656. XChipAText[4].IText = (UBYTE *)"   @ 1.0M";
  1657. XChipAText[5].IText = (UBYTE *)"   @ 1.5M";
  1658. X}
  1659. X
  1660. X/*****************************************************************/
  1661. X/*    The following initializes the structure arrays             */
  1662. X/*   needed to provide the Slow Fast Mem Size menu topic.        */
  1663. X/*****************************************************************/
  1664. X
  1665. Xvoid InitSFItems()
  1666. X    {
  1667. X    int       n,nplus1;
  1668. X
  1669. X/* initialize each menu item and IntuiText with loop */
  1670. Xfor( n=0; n<SFMAX; n++ )
  1671. X    {
  1672. X    nplus1 = n + 1;
  1673. X    SFItem[n].NextItem = &SFItem[nplus1];
  1674. X    SFItem[n].LeftEdge = 0;
  1675. X    SFItem[n].TopEdge = 9 * n;
  1676. X    SFItem[n].Width = 80;
  1677. X    SFItem[n].Height = 9;
  1678. X    SFItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1679. X    SFItem[n].MutualExclude = (~(1 << n));
  1680. X    SFItem[n].ItemFill = (APTR)&SFText[n];
  1681. X    SFItem[n].SelectFill = NULL;
  1682. X    SFItem[n].Command = 0;
  1683. X    SFItem[n].NextSelect = 0;
  1684. X
  1685. X    SFText[n].FrontPen = BLUP;
  1686. X    SFText[n].BackPen = WHTP;
  1687. X    SFText[n].DrawMode = JAM2;    
  1688. X    SFText[n].LeftEdge = 0;
  1689. X    SFText[n].TopEdge = 1;
  1690. X    SFText[n].ITextFont = NULL;
  1691. X    SFText[n].NextText = NULL;
  1692. X    }
  1693. XSFItem[SFMAX-1].NextItem = NULL;
  1694. X
  1695. X/* select slow fast mem size item checked */
  1696. Xswitch (p_sf) {
  1697. X    case    0:      n = 0;  break;
  1698. X    case  256:      n = 1;  break;
  1699. X    case  512:      n = 2;  break;
  1700. X    case  768:      n = 3;  break;
  1701. X    case 1024:      n = 4;  break;
  1702. X    case 1536:      n = 5;  break;
  1703. X    case 2048:      n = 6;  break;
  1704. X    case 3072:      n = 7;  break;
  1705. X    case 4096:      n = 8;  break;
  1706. X    case 6144:      n = 9;  break;
  1707. X    case 8192:      n = 10; break;
  1708. X    default:        n = 0;  p_sf = 0;
  1709. X    }
  1710. XSFItem[n].Flags |= CHECKED;
  1711. X
  1712. XSFText[ 0].IText = (UBYTE *)"   NONE  ";
  1713. XSFText[ 1].IText = (UBYTE *)"   .25 MB";
  1714. XSFText[ 2].IText = (UBYTE *)"   .5  MB";
  1715. XSFText[ 3].IText = (UBYTE *)"   .75 MB";
  1716. XSFText[ 4].IText = (UBYTE *)"   1.0 MB";
  1717. XSFText[ 5].IText = (UBYTE *)"   1.5 MB";
  1718. XSFText[ 6].IText = (UBYTE *)"   2.0 MB";
  1719. XSFText[ 7].IText = (UBYTE *)"   3.0 MB";
  1720. XSFText[ 8].IText = (UBYTE *)"   4.0 MB";
  1721. XSFText[ 9].IText = (UBYTE *)"   6.0 MB";
  1722. XSFText[10].IText = (UBYTE *)"   8.0 MB";
  1723. X}
  1724. X
  1725. X/*****************************************************************/
  1726. X/*    The following initializes the structure arrays             */
  1727. X/*   needed to provide the Slow Fast Mem Base Addr menu topic.   */
  1728. X/*****************************************************************/
  1729. X
  1730. Xvoid InitSFAItems()
  1731. X    {
  1732. X    int       n,nplus1;
  1733. X
  1734. X/* initialize each menu item and IntuiText with loop */
  1735. Xfor( n=0; n<SFAMAX; n++ )
  1736. X    {
  1737. X    nplus1 = n + 1;
  1738. X    SFAItem[n].NextItem = &SFAItem[nplus1];
  1739. X    SFAItem[n].LeftEdge = 0;
  1740. X    SFAItem[n].TopEdge = 9 * n;
  1741. X    SFAItem[n].Width = 104;
  1742. X    SFAItem[n].Height = 9;
  1743. X    SFAItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1744. X    SFAItem[n].MutualExclude = (~(1 << n));
  1745. X    SFAItem[n].ItemFill = (APTR)&SFAText[n];
  1746. X    SFAItem[n].SelectFill = NULL;
  1747. X    SFAItem[n].Command = 0;
  1748. X    SFAItem[n].NextSelect = 0;
  1749. X
  1750. X    SFAText[n].FrontPen = BLUP;
  1751. X    SFAText[n].BackPen = WHTP;
  1752. X    SFAText[n].DrawMode = JAM2;    
  1753. X    SFAText[n].LeftEdge = 0;
  1754. X    SFAText[n].TopEdge = 1;
  1755. X    SFAText[n].ITextFont = NULL;
  1756. X    SFAText[n].NextText = NULL;
  1757. X    }
  1758. XSFAItem[SFAMAX-1].NextItem = NULL;
  1759. X
  1760. X/* select slow fast mem base address item checked */
  1761. Xswitch (p_sfa) {
  1762. X    case  2048:     n =  0; break;              /* 0x0800 kb =  2    mb */
  1763. X    case  2304:     n =  1; break;              /* 0x0900 kb =  2.25 mb */
  1764. X    case  2560:     n =  2; break;              /* 0x0A00 kb =  2.5  mb */
  1765. X    case  2816:     n =  3; break;              /* 0x0B00 kb =  2.75 mb */
  1766. X    case  3072:     n =  4; break;              /* 0x0C00 kb =  3    mb */
  1767. X    case  4096:     n =  5; break;              /* 0x1000 kb =  4    mb */
  1768. X    case  5120:     n =  6; break;              /* 0x1400 kb =  5    mb */
  1769. X    case  6144:     n =  7; break;              /* 0x1800 kb =  6    mb */
  1770. X    case  7168:     n =  8; break;              /* 0x1C00 kb =  7    mb */
  1771. X    case  8192:     n =  9; break;              /* 0x2000 kb =  8    mb */
  1772. X    case  9216:     n = 10; break;              /* 0x2400 kb =  9    mb */
  1773. X    case 12288:     n = 11; break;              /* 0x3000 kb = 12    mb */
  1774. X    case 12544:     n = 12; break;              /* 0x3100 kb = 12.25 mb */
  1775. X    case 12800:     n = 13; break;              /* 0x3200 kb = 12.5  mb */
  1776. X    case 13056:     n = 14; break;              /* 0x3300 kb = 12.75 mb */
  1777. X    case 13312:     n = 15; break;              /* 0x3400 kb = 13    mb */
  1778. X    default:        n =  0; p_sfa = 2048;
  1779. X    }
  1780. XSFAItem[n].Flags |= CHECKED;
  1781. X
  1782. XSFAText[ 0].IText = (UBYTE *)"   @ 2.0 Meg";
  1783. XSFAText[ 1].IText = (UBYTE *)"   @ 2.4 Meg";
  1784. XSFAText[ 2].IText = (UBYTE *)"   @ 2.8 Meg";
  1785. XSFAText[ 3].IText = (UBYTE *)"   @ 2.C Meg";
  1786. XSFAText[ 4].IText = (UBYTE *)"   @ 3.0 Meg";
  1787. XSFAText[ 5].IText = (UBYTE *)"   @ 4.0 Meg";
  1788. XSFAText[ 6].IText = (UBYTE *)"   @ 5.0 Meg";
  1789. XSFAText[ 7].IText = (UBYTE *)"   @ 6.0 Meg";
  1790. XSFAText[ 8].IText = (UBYTE *)"   @ 7.0 Meg";
  1791. XSFAText[ 9].IText = (UBYTE *)"   @ 8.0 Meg";
  1792. XSFAText[10].IText = (UBYTE *)"   @ 9.0 Meg";
  1793. XSFAText[11].IText = (UBYTE *)"   @ C.0 Meg";
  1794. XSFAText[12].IText = (UBYTE *)"   @ C.4 Meg";
  1795. XSFAText[13].IText = (UBYTE *)"   @ C.8 Meg";
  1796. XSFAText[14].IText = (UBYTE *)"   @ C.C Meg";
  1797. XSFAText[15].IText = (UBYTE *)"   @ D.0 Meg";
  1798. X}
  1799. X
  1800. X/*****************************************************************/
  1801. X/*    The following initializes the structure arrays             */
  1802. X/*   needed to provide the Fast Mem Size menu topic.             */
  1803. X/*****************************************************************/
  1804. X
  1805. Xvoid InitFastItems()
  1806. X    {
  1807. X    int       n,nplus1;
  1808. X
  1809. X/* initialize each menu item and IntuiText with loop */
  1810. Xfor( n=0; n<FASTMAX; n++ )
  1811. X    {
  1812. X    nplus1 = n + 1;
  1813. X    FastItem[n].NextItem = &FastItem[nplus1];
  1814. X    FastItem[n].LeftEdge = 0;
  1815. X    FastItem[n].TopEdge = 9 * n;
  1816. X    FastItem[n].Width = 80;
  1817. X    FastItem[n].Height = 9;
  1818. X    FastItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1819. X    FastItem[n].MutualExclude = (~(1 << n));
  1820. X    FastItem[n].ItemFill = (APTR)&FastText[n];
  1821. X    FastItem[n].SelectFill = NULL;
  1822. X    FastItem[n].Command = 0;
  1823. X    FastItem[n].NextSelect = 0;
  1824. X
  1825. X    FastText[n].FrontPen = BLUP;
  1826. X    FastText[n].BackPen = WHTP;
  1827. X    FastText[n].DrawMode = JAM2;    
  1828. X    FastText[n].LeftEdge = 0;
  1829. X    FastText[n].TopEdge = 1;
  1830. X    FastText[n].ITextFont = NULL;
  1831. X    FastText[n].NextText = NULL;
  1832. X    }
  1833. XFastItem[FASTMAX-1].NextItem = NULL;
  1834. X
  1835. X/* select fast mem size item checked */
  1836. Xswitch (p_fast) {
  1837. X    case   0:       n = 0;  break;
  1838. X    case 256:       n = 1;  break;
  1839. X    case 512:       n = 2;  break;
  1840. X    case 756:       n = 3;  break;
  1841. X    case   1:       n = 4;  break;
  1842. X    case   2:       n = 5;  break;
  1843. X    case   3:       n = 6;  break;
  1844. X    case   4:       n = 7;  break;
  1845. X    case   6:       n = 8;  break;
  1846. X    case   8:       n = 9;  break;
  1847. X    case  10:       n = 10;  break;
  1848. X    case  12:       n = 11;  break;
  1849. X    case  13:       n = 12; break;
  1850. X    case  14:       n = 13; break;
  1851. X    case  15:       n = 14; break;
  1852. X    case  16:       n = 15; break;
  1853. X    default:        n = 0;  p_fast = 0;
  1854. X    }
  1855. XFastItem[n].Flags |= CHECKED;
  1856. X
  1857. XFastText[ 0].IText = (UBYTE *)"   NONE";
  1858. XFastText[ 1].IText = (UBYTE *)"   256K";
  1859. XFastText[ 2].IText = (UBYTE *)"   512K";
  1860. XFastText[ 3].IText = (UBYTE *)"   756K";
  1861. XFastText[ 4].IText = (UBYTE *)"   1 MB";
  1862. XFastText[ 5].IText = (UBYTE *)"   2 MB";
  1863. XFastText[ 6].IText = (UBYTE *)"   3 MB";
  1864. XFastText[ 7].IText = (UBYTE *)"   4 MB";
  1865. XFastText[ 8].IText = (UBYTE *)"   6 MB";
  1866. XFastText[ 9].IText = (UBYTE *)"   8 MB";
  1867. XFastText[10].IText = (UBYTE *)"  10 MB";
  1868. XFastText[11].IText = (UBYTE *)"  12 MB";
  1869. XFastText[12].IText = (UBYTE *)"  13 MB";
  1870. XFastText[13].IText = (UBYTE *)"  14 MB";
  1871. XFastText[14].IText = (UBYTE *)"  15 MB";
  1872. XFastText[15].IText = (UBYTE *)"  16 MB";
  1873. X}
  1874. X
  1875. X/*****************************************************************/
  1876. X/*    The following initializes the structure arrays             */
  1877. X/*   needed to provide the Fast Mem Base Addr menu topic.        */
  1878. X/*****************************************************************/
  1879. X
  1880. Xvoid InitFastAItems()
  1881. X    {
  1882. X    int       n,nplus1;
  1883. X
  1884. X/* initialize each menu item and IntuiText with loop */
  1885. Xfor( n=0; n<FASTAMAX; n++ )
  1886. X    {
  1887. X    nplus1 = n + 1;
  1888. X    FastAItem[n].NextItem = &FastAItem[nplus1];
  1889. X    FastAItem[n].LeftEdge = 0;
  1890. X    FastAItem[n].TopEdge = 9 * n;
  1891. X    FastAItem[n].Width = 80;
  1892. X    FastAItem[n].Height = 9;
  1893. X    FastAItem[n].Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT;
  1894. X    FastAItem[n].MutualExclude = (~(1 << n));
  1895. X    FastAItem[n].ItemFill = (APTR)&FastAText[n];
  1896. X    FastAItem[n].SelectFill = NULL;
  1897. X    FastAItem[n].Command = 0;
  1898. X    FastAItem[n].NextSelect = 0;
  1899. X
  1900. X    FastAText[n].FrontPen = BLUP;
  1901. X    FastAText[n].BackPen = WHTP;
  1902. X    FastAText[n].DrawMode = JAM2;    
  1903. X    FastAText[n].LeftEdge = 0;
  1904. X    FastAText[n].TopEdge = 1;
  1905. X    FastAText[n].ITextFont = NULL;
  1906. X    FastAText[n].NextText = NULL;
  1907. X    }
  1908. XFastAItem[FASTAMAX-1].NextItem = NULL;
  1909. X
  1910. X/* select fast base address item checked */
  1911. Xswitch (p_fasta) {
  1912. X    case   2:       n = 0;   break;     /* Offset in megs above 0x0000000 */
  1913. X    case   3:       n = 1;   break;
  1914. X    case   4:       n = 2;   break;
  1915. X    case   5:       n = 3;   break;
  1916. X    case   6:       n = 4;   break;
  1917. X    case   8:       n = 5;   break;
  1918. X    case  -1:       n = 6;   break;
  1919. X    case  -2:       n = 7;   break;
  1920. X    case  -3:       n = 8;   break;     /* Offset in megs below 0x8000000 */
  1921. X    case  -4:       n = 9;   break;
  1922. X    case  -6:       n = 10;  break;
  1923. X    case  -8:       n = 11;  break;
  1924. X    case -10:       n = 12;  break;
  1925. X    case -12:       n = 13;  break;
  1926. X    case -14:       n = 14;  break;
  1927. X    case -16:       n = 15;  break;
  1928. X    default:        n =  6;  p_fasta = -1;
  1929. X    }
  1930. XFastAItem[n].Flags |= CHECKED;
  1931. X
  1932. XFastAText[ 0].IText = (UBYTE *)"   @ 2 M";
  1933. XFastAText[ 1].IText = (UBYTE *)"   @ 3 M";
  1934. XFastAText[ 2].IText = (UBYTE *)"   @ 4 M";
  1935. XFastAText[ 3].IText = (UBYTE *)"   @ 5 M";
  1936. XFastAText[ 4].IText = (UBYTE *)"   @ 6 M";
  1937. XFastAText[ 5].IText = (UBYTE *)"   @ 8 M";
  1938. XFastAText[ 6].IText = (UBYTE *)"   @7f M";
  1939. XFastAText[ 7].IText = (UBYTE *)"   @7e M";
  1940. XFastAText[ 8].IText = (UBYTE *)"   @7d M";
  1941. XFastAText[ 9].IText = (UBYTE *)"   @7c M";
  1942. XFastAText[10].IText = (UBYTE *)"   @7a M";
  1943. XFastAText[11].IText = (UBYTE *)"   @78 M";
  1944. XFastAText[12].IText = (UBYTE *)"   @76 M";
  1945. XFastAText[13].IText = (UBYTE *)"   @74 M";
  1946. XFastAText[14].IText = (UBYTE *)"   @72 M";
  1947. XFastAText[15].IText = (UBYTE *)"   @70 M";
  1948. X}
  1949. X
  1950. X/****************************************************************/
  1951. X/*   The following function inits the Menu structure array with */
  1952. X/*  appropriate values for our simple menu.  Review the manual  */
  1953. X/*  if you need to know what each value means.                  */
  1954. X/****************************************************************/
  1955. Xvoid InitMenu()
  1956. X{
  1957. Xmenu[0].NextMenu = &menu[1];
  1958. Xmenu[0].LeftEdge = 0;
  1959. Xmenu[0].TopEdge = 0;
  1960. Xmenu[0].Width = 64;
  1961. Xmenu[0].Height = 10;
  1962. Xmenu[0].Flags = MENUENABLED;
  1963. Xmenu[0].MenuName = "Project";        /* text for menu-bar display */
  1964. Xmenu[0].FirstItem = &ProjItem[0];    /* pointer to first item in list */
  1965. X
  1966. Xmenu[1].NextMenu = &menu[2];
  1967. Xmenu[1].LeftEdge = 64;
  1968. Xmenu[1].TopEdge = 0;
  1969. Xmenu[1].Width = 48;
  1970. Xmenu[1].Height = 10;
  1971. Xmenu[1].Flags = MENUENABLED;
  1972. Xmenu[1].MenuName = "Setup";          /* text for menu-bar display */
  1973. Xmenu[1].FirstItem = &SetupItem[0];   /* pointer to first item in list */
  1974. X
  1975. Xmenu[2].NextMenu = &menu[3];
  1976. Xmenu[2].LeftEdge = 112;
  1977. Xmenu[2].TopEdge = 0;
  1978. Xmenu[2].Width = 72;
  1979. Xmenu[2].Height = 10;
  1980. Xmenu[2].Flags = MENUENABLED;
  1981. Xmenu[2].MenuName = "Priority";       /* text for menu-bar display */
  1982. Xmenu[2].FirstItem = &PrioItem[0];    /* pointer to first item in list */
  1983. X
  1984. Xmenu[3].NextMenu = &menu[4];
  1985. Xmenu[3].LeftEdge = 184;
  1986. Xmenu[3].TopEdge = 0;
  1987. Xmenu[3].Width = 80;
  1988. Xmenu[3].Height = 10;
  1989. Xmenu[3].Flags = MENUENABLED;
  1990. Xmenu[3].MenuName = "Chip Size";      /* text for menu-bar display */
  1991. Xmenu[3].FirstItem = &ChipItem[0];    /* pointer to first item in list */
  1992. X
  1993. Xmenu[4].NextMenu = &menu[5];
  1994. Xmenu[4].LeftEdge = 264;
  1995. Xmenu[4].TopEdge = 0;
  1996. Xmenu[4].Width = 80;
  1997. Xmenu[4].Height = 10;
  1998. Xmenu[4].Flags = MENUENABLED;
  1999. Xmenu[4].MenuName = "Chip Addr";      /* text for menu-bar display */
  2000. Xmenu[4].FirstItem = &ChipAItem[0];   /* pointer to first item in list */
  2001. X
  2002. Xmenu[5].NextMenu = &menu[6];
  2003. Xmenu[5].LeftEdge = 344;
  2004. Xmenu[5].TopEdge = 0;
  2005. Xmenu[5].Width = 64;
  2006. Xmenu[5].Height = 10;
  2007. Xmenu[5].Flags = MENUENABLED;
  2008. Xmenu[5].MenuName = "SF Size";        /* text for menu-bar display */
  2009. Xmenu[5].FirstItem = &SFItem[0];      /* pointer to first item in list */
  2010. X
  2011. Xmenu[6].NextMenu = &menu[7];
  2012. Xmenu[6].LeftEdge = 408;
  2013. Xmenu[6].TopEdge = 0;
  2014. Xmenu[6].Width = 64;
  2015. Xmenu[6].Height = 10;
  2016. Xmenu[6].Flags = MENUENABLED;
  2017. Xmenu[6].MenuName = "SF Addr";        /* text for menu-bar display */
  2018. Xmenu[6].FirstItem = &SFAItem[0];     /* pointer to first item in list */
  2019. X
  2020. Xmenu[7].NextMenu = &menu[8];
  2021. Xmenu[7].LeftEdge = 472;
  2022. Xmenu[7].TopEdge = 0;
  2023. Xmenu[7].Width = 80;
  2024. Xmenu[7].Height = 10;
  2025. Xmenu[7].Flags = MENUENABLED;
  2026. Xmenu[7].MenuName = "Fast Size";      /* text for menu-bar display */
  2027. Xmenu[7].FirstItem = &FastItem[0];    /* pointer to first item in list */
  2028. X
  2029. Xmenu[8].NextMenu = NULL;
  2030. Xmenu[8].LeftEdge = 552;
  2031. Xmenu[8].TopEdge = 0;
  2032. Xmenu[8].Width = 80;
  2033. Xmenu[8].Height = 10;
  2034. Xmenu[8].Flags = MENUENABLED;
  2035. Xmenu[8].MenuName = "Fast Addr";      /* text for menu-bar display */
  2036. Xmenu[8].FirstItem = &FastAItem[0];   /* pointer to first item in list */
  2037. X
  2038. X}
  2039. X
  2040. Xvoid StartMenus()
  2041. X{
  2042. XSetMenuStrip(window,&menu[0]);
  2043. X}
  2044. END_OF_FILE
  2045. if test 27558 -ne `wc -c <'mminit.c'`; then
  2046.     echo shar: \"'mminit.c'\" unpacked with wrong size!
  2047. fi
  2048. # end of 'mminit.c'
  2049. fi
  2050. echo shar: End of archive 2 \(of 2\).
  2051. cp /dev/null ark2isdone
  2052. MISSING=""
  2053. for I in 1 2 ; do
  2054.     if test ! -f ark${I}isdone ; then
  2055.     MISSING="${MISSING} ${I}"
  2056.     fi
  2057. done
  2058. if test "${MISSING}" = "" ; then
  2059.     echo You have unpacked both archives.
  2060.     rm -f ark[1-9]isdone
  2061. else
  2062.     echo You still need to unpack the following archives:
  2063.     echo "        " ${MISSING}
  2064. fi
  2065. ##  End of shell archive.
  2066. exit 0
  2067. -- 
  2068. Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
  2069. Mail comments to the moderator at <amiga-request@uunet.uu.net>.
  2070. Post requests for sources, and general discussion to comp.sys.amiga.misc.
  2071.